package models; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.atomic.AtomicInteger; public class Server implements Runnable { private Task tail; private BlockingQueue<Task> bq; private BlockingQueue<Task> allTasks; private AtomicInteger waitingTime; public Server() { waitingTime = new AtomicInteger(0); bq = new LinkedBlockingQueue<>(); allTasks= new LinkedBlockingQueue<>(); } @Override public void run() { while (true) { Task t; try { t = bq.take(); Thread.sleep(t.getServiceTime()*1000); waitingTime.addAndGet((-1) * t.getServiceTime()); } catch (InterruptedException e) { e.printStackTrace(); } } } public int getWaitingTime(){ return waitingTime.get(); } public void addTask(Task t) { bq.add(t); allTasks.add(t); tail=t; waitingTime.addAndGet(t.getServiceTime()); } public Task[] getTasks(){ Task[] task = new Task[bq.size()]; bq.toArray(task); return task; } public Task[] getAllTasks(){ Task[] allTaskArray = new Task[allTasks.size()]; allTasks.toArray(allTaskArray ); return allTaskArray ; } public boolean isEmpty(){ return bq.isEmpty(); } public Task getTail(){ return tail; } }